﻿$(function($) {


   $("#comit").off().on("click", function() {
        var data = $("#component_model").data("rowData");
        if (data) {
            var value = JSON.stringify(data);
            alert(value);
        }

    });

    $("#export").off().on("click", function() {



    });
    
    //加载xml配置文件的结果
    var gridProperty = {
        displayFields: [],
        component_model: {
            datafields: [],
            columns: []
        },
        yc: {
            displayFields: [],
            datafields: [],
            columns: [] 
        },
        yx: {
            displayFields: [],
            datafields: [],
            columns: [] 
        },
        yk: {
            displayFields: [],
            datafields: [],
            columns: [] 
        },
        yt: {
            displayFields: [],
            datafields: [],
            columns: [] 
        }
    };

    initGridFields("component_model");
    initToolBar();
    //////////////////////////////////////////////////////////////
    //
    //加载配置文件，并形成界面
    //////////////////////////////////////////////////////////////
    function initGridFields(tableid) {
        var url = "table_xml/component/ModelParam.xml";
        // prepare the data
        var source = tableSource(url);
        var ss = {};
        //加载配置文件
        var dataAdapter = new $.jqx.dataAdapter(source, {
            autoBind: true,
            loadComplete: function() {
                // get data records.

                var records = dataAdapter.records;
                console.dir(records);

                var length = records.length;
                for (var i = 0; i < length; i++) {
                    var record = records[i];
                    var fields = {};
                    fields["name"] = record.Field;
                    gridProperty.displayFields.push();
                    gridProperty[tableid].datafields.push(fields);

                    var column = {};
                    column["datafield"] = record.Field;
                    column["text"] = record.Desc;
                    //进程名称不可编辑
                    if (record.Field == "EqptId")
                        column["editable"] = false;


                    gridProperty[tableid].columns.push(column);
                }

                //================== 表格初始话数据加载完成了之后才初始化 tab，然后在tab的init中初始化表格

                initGrid(tableid);
            }
        });


    }

    /////////////////////////////////////////////////////////////
    //   
    //  设备详细表格
    /////////////////////////////////////////////////////////////
    function initGrid(tableid) {

        var source = {
            datatype: "csv",
            datafields: gridProperty[tableid].datafields,
            url: 'defaultData/component/cluster.csv',
            id: "ModelId" //关联设备ID到
        };

        var dataAdapter = new $.jqx.dataAdapter(source, {
            async: false,
            loadError: function(xhr, status, error) {
                //  alert('Error loading "' + source.url + '" : ' + error);
            }
        });

        var table = $("#" + tableid).jqxGrid({
            width: '99.5%',
            height: '200',
            theme: theme,
            editable: true,
            altrows: true,
            source: dataAdapter,
            //  selectionmode : 'singlecell', //设置选择方式
            columns: gridProperty[tableid].columns
        }).on('cellvaluechanged', function(event) {

            var field = args.datafield;
            var rowindex = args.rowindex;
            var value = args.newvalue;
            if (!value)
                return;

            var row = table.jqxGrid('getrowdata', rowindex);
            var oldvalue = args.oldvalue;
            //设置变化值到缓存中
            if (!$(this).data("rowData"))
                $(this).data("rowData", {});
            var rowData = $(this).data("rowData");
            var item = rowData[row.uid];
            if (item) {
                //更新的，直接更新数据，更新对应字段的数据。
                //添加的 ，不更新操作，直接更新数据。
                //删除的，提示删除一条已经备删除的记录。
                if (item.handle == 'delete') {
                    console.warn("错误，更新一条需要删除的记录");
                } else {
                    item.val[field] = value;
                }
            } else {
                //没有就创建一条更新的数据
                item = {};
                item.handle = 'update';
                item.val = {};
                item.val[field] = value;
            }

            rowData[row.uid] = item; //更新到rowdata

            $(this).data("rowData", rowData);



        });


        
    };

    //////////////////////////////////////////////////////
    //
    //   工具栏添加删除按钮 功能实现
    //////////////////////////////////////////////////////
    function initToolBar() {
        var toolAction = {
            tool_add: function() {
                //

                var currentTable = "#component_model";
                var eqpid = $.config.EqpId.get();
                var commit = $(currentTable).jqxGrid('addrow', null, {
                    "EqptId": eqpid
                });

                if (!$(currentTable).data("rowData")) {
                    $(currentTable).data("rowData", {});
                }
                var items = $(currentTable).data("rowData");
                var item = items[eqpid]; //全局ID产生器
                //如果之前有对改时间的删除项，则修改为更新项。
                if (item) {
                    item.handle = 'update';
                } else {
                    //否则，新建插入项
                    item = {};
                    item.handle = 'insert';

                }
                item.val = {};

                items[eqpid] = item;
                $(currentTable).data("rowData", items);



            },
            tool_delete: function() {
                table = $("#component_model");
                //设置为 'singlecell', 'multiplecells' or 'multiplecellsextended' 需要使用getselectedcell 方法
                // var cell = table.jqxGrid('getselectedcell');
                // var selectedrowindex = cell.rowindex;
                var selectedrowindex = table.jqxGrid('getselectedrowindex');
                var rowscount = table.jqxGrid('getdatainformation').rowscount;
                if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
                    var id = table.jqxGrid('getrowid', selectedrowindex);

                    //var row = table.jqxGrid('getrowdata', id);
                    //alert(data.firstname + " " + data.lastname);

                    if (!table.data("rowData")) {
                        table.data("rowData", {});
                    }
                    var items = table.data("rowData");
                    var item = items[id]
                    if (item) {
                        //更新的，标识为删除。
                        //添加的，直接删除
                        if (item.handle == 'update') {
                            item.handle = 'delete';
                        } else {
                            delete items[id];

                        }
                    } else {
                        //没有该项，添加，并标识为删除
                        item = {};
                        item.handle = 'delete';
                        items[id] = item;
                    }

                    $.config.EqpId.remove(id);

                    table.data("rowData", items);

                    var commit = table.jqxGrid('deleterow', id);

                }
            }
        };
        $(".tool_btn").on("click", function() {

            toolAction[$(this).attr("id")]();
        });


    }



    /////////////********** 设备量测表初始化***********/////////////
    ////////////////////////////////////////////////////
    $('#measureTabs').jqxTabs({
        width: '99.5%',
        height: '99.5%',
        theme: theme,
        collapsible: true,
        initTabContent: function(tab) {
            // The 'tab' parameter represents the selected tab's index.
            var measureType = ["yc", "yx", "yk", "yt"];
            initPropertyGrid(measureType[tab]);
            // var pageIndex = tab + 1;
            // loadPage('pages/ajax' + pageIndex + '.htm', pageIndex);
        }

    }).on('tabclick', function(event) {
        var tabclicked = event.args.item;
        currentTable = "#process_" + tableid[tabclicked];
        // alert('The clicked tab is ' + tabclicked);
        //  alert( event.args.target );
    });
    /////////////////////////////////////////////////////////////////////
    //加载配置文件，并形成界面
    // measureType  通道或是驱动
    // driverType  具体通道或是驱动的类型
    /////////////////////////////////////////////////////////////////////
    function initPropertyGrid(measureType) {

        var source = {
            datatype: "xml",
            datafields: [{
                name: 'Desc',
                map: 'm\\:properties>d\\:Desc'
            }, {
                name: 'Field',
                map: 'm\\:properties>d\\:Field'
            }, {
                name: 'DefaultValue',
                map: 'm\\:properties>d\\:DefaultValue'
            }, {
                name: 'DataType',
                map: 'm\\:properties>d\\:DataType'
            }, {
                name: 'Enum',
                map: 'm\\:properties>d\\:EnumData' //在低版本中，xml的项必须存在，且不能为空，高版本中可以不存在，且能为空，所以在没有枚举量的xml项中补填N作为占位
            }],
            root: "content",
            // record : "content",
            id: 'm\\:properties>d\\:Field',
            url: "table_xml/component/DataEnum.xml"
        };
        //加载配置文件
        var dataAdapter = new $.jqx.dataAdapter(source, {
            autoBind: true,
            loadComplete: function() {
                // get data records.
                var records = dataAdapter.records;
                var length = records.length;
                for (var i = 0; i < length; i++) {
                    var record = records[i];
                    var fields = {};
                    fields["name"] = record.Field;
                    gridProperty[measureType].displayFields.push(record.Field);
                    gridProperty[measureType].datafields.push(fields);

                    var column = {};
                    column["datafield"] = record.Field;
                    column["text"] = record.Desc;

                    //根据 配置项的多少决定是否设置宽度
                    var width = $("#measureTabs").width();
                    if ((length * 100) > width)
                        column["width"] = 100;
                    //数据全局id禁止编辑     
                    if (record.Field == 'DataId') {
                        column["editable"] = false;
                        column["cellvaluechanging"] = function(row, datafield, columntype, oldvalue, newvalue) {
                            newvalue = oldvalue;
                            return oldvalue;
                        }
                        column['disable'] = true;

                    }

                    gridProperty[measureType].columns.push(column);
                }

                //================== 表格初始话数据加载完成了之后才初始化 tab，然后在tab的init中初始化表格
                return crateGird(measureType);
            }
        });

        //////////////////////////////////////////////////////////////////
        // 通过配置文件加载的数据项，形成数据表格框架，并加根据 driverType加载表格数据
        //
        //////////////////////////////////////////////////////////////////
        function crateGird(measureType) {

            var source = {
                datatype: "csv",
                datafields: gridProperty[measureType].datafields,
                url: "defaultData/Measure .csv"
            };

            var dataAdapter = new $.jqx.dataAdapter(source, {

                loadError: function(xhr, status, error) {
                     
                }
            });


            var table = $("#measure_" + measureType).jqxGrid({
                width: '99.5%',
                height: '99.5%',
                theme: theme,
                columnsresize: true, //设置可调整columns大小
                editable: true,
                altrows: true,
     
                enablebrowserselection: false, //禁止浏览器文本选择功能

                selectionmode: 'multiplecellsadvanced', //'multiplecellsadvanced', //'multiplecellsextended' , //设置选择方式
                source: dataAdapter,
                ready: function() {

                },
                //  selectionmode : 'singlecell', //设置选择方式
                columns: gridProperty[measureType].columns
            }).on('cellvaluechanged', function(event) {

                var field = args.datafield;
                var rowindex = args.rowindex;
                var value = args.newvalue;
                if (!value)
                    return;

                var row = table.jqxGrid('getrowdata', rowindex);
                var oldvalue = args.oldvalue;
                //设置变化值到缓存中
                if (!$(this).data("rowData"))
                    $(this).data("rowData", {});
                var rowData = $(this).data("rowData");
                var item = rowData[row.DataId];
                if (item) {
                    //更新的，直接更新数据，更新对应字段的数据。
                    //添加的 ，不更新操作，直接更新数据。
                    //删除的，提示删除一条已经备删除的记录。
                    if (item.handle == 'delete') {
                        console.dir("错误，更新一条需要删除的记录");
                    } else {
                        item.val[field] = value;
                    }
                } else {
                    //没有就创建一条更新的数据
                    item = {};
                    item.handle = 'update';
                    item.val = {};
                    item.val[field] = value;
                }

                rowData[row.DataId] = item; //更新到rowdata

                $(this).data("rowData", rowData);


                // console.dir(column + '==' + row + "===" + value + $(this).attr('id'));

            });



            return table;
        }

    }
});